// 修正后的键盘处理代码
#include "keyboard.h"
#include "login.h"  // 包含界面定义

// 键盘对象
lv_obj_t * keyboard = NULL;
 
// 显示键盘并绑定到输入框（修复：动态绑定到当前屏幕）
void show_keyboard(lv_obj_t * textarea) {
    if (keyboard == NULL) {
        // 修复1：键盘父对象改为当前活动屏幕，确保在任何界面都能显示
        keyboard = lv_keyboard_create(lv_scr_act());  // lv_scr_act()获取当前活动屏幕
        lv_obj_set_size(keyboard, 716, 240);
        lv_obj_set_pos(keyboard, 0, 50);  // 位置调整为适合所有界面
        
        // 绑定确认键事件
        lv_obj_add_event_cb(keyboard, keyboard_event_cb, LV_EVENT_READY, NULL);
    }
    // 关键修复1：强制解绑旧输入框，避免冲突
    lv_keyboard_set_textarea(keyboard, NULL);
    // 关键修复2：将键盘父对象强制切换到当前活动屏幕（屏幕6）
    lv_obj_set_parent(keyboard, lv_scr_act());
    // 重新绑定新输入框（屏幕6的输入框）
    lv_keyboard_set_textarea(keyboard, textarea);
    lv_obj_clear_flag(keyboard, LV_OBJ_FLAG_HIDDEN);  // 显示键盘
    lv_obj_move_foreground(keyboard);  // 确保键盘在最上层
}
 
// 键盘事件回调
void keyboard_event_cb(lv_event_t * e) {
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * kb = lv_event_get_target(e);
 
    if (code == LV_EVENT_READY) {
        lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);  // 隐藏键盘
    }
}

// 修复2：修正输入框点击事件（移除嵌套定义，统一处理所有输入框）
void ta_event_cb(lv_event_t * e) {
    lv_obj_t * ta = lv_event_get_target(e);  // 获取当前点击的输入框
    
    // 显示键盘并绑定
    show_keyboard(ta);
    
    // 根据输入框类型切换键盘模式
    // 1. 判断是否为密码框
    if (ta == ui_tapassword || ta == ui_taRegPassword || ta == ui_taRegConfirmPassword) {
        // 密码框：数字模式
        lv_keyboard_set_mode(keyboard, LV_KEYBOARD_MODE_NUMBER);
    } 
    // 2. 判断是否为聊天输入框
    else if (ta == input_area) { // <-- 新增：添加聊天输入框的判断
        // 聊天输入框：文本模式，方便输入汉字或字母
        lv_keyboard_set_mode(keyboard, LV_KEYBOARD_MODE_TEXT_LOWER);
    }
    // 3. 其他情况（如用户名）也默认为文本模式
    else {
        // 用户名框或其他未知输入框：文本模式
        lv_keyboard_set_mode(keyboard, LV_KEYBOARD_MODE_TEXT_LOWER);
    }
}

// 重置键盘状态（在界面切换时调用）
// 修复3：增强重置逻辑，彻底清空绑定
void reset_keyboard() {
    if (keyboard != NULL) {
        lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN);
        lv_keyboard_set_textarea(keyboard, NULL); // 彻底解绑输入框
        lv_obj_set_parent(keyboard, lv_scr_act()); // 归属当前屏幕
        lv_keyboard_set_mode(keyboard, LV_KEYBOARD_MODE_TEXT_LOWER);
    }
}

// 修复4：新增「强制重置键盘」函数（供屏幕切换时调用）
void force_reset_keyboard() {
    reset_keyboard();
    // 额外确保键盘父对象正确
    if (keyboard) {
        lv_obj_set_parent(keyboard, lv_scr_act());
    }
}